C# .NStar (Pre-Pre-Alpha) 0.09
Привет,
неизвестный путник! Здесь вы можете
просмотреть информацию об C#
.NStar (Pre-Pre-Alpha) 0.09. Вы можете скачать
EXE или просмотреть список
изменений, скриншоты и/или видео.
Что
уже проверено и работает в
дополнение к версии Preview 1.0:
1. Список
ошибок теперь работает именно в виде
списка, а не в виде конкатенаций строк
в цикле. Думаю, для знакомых с C# .NET
последствия очевидны.
2. Следующие
статические функции: DateTime.Compare(),
DateTime.DaysInMonth(), DateTime.FromBinary(),
DateTime.IsLeapYear().
3. Следующие экземплярные
функции: DateTime.AddDays(), DateTime.AddHours(),
DateTime.AddMilliseconds(), DateTime.AddMinutes(),
DateTime.AddMonths(), DateTime.AddSeconds(), DateTime.AddTicks(),
DateTime.AddYears(), DateTime.CompareTo(), DateTime.IsSummertime(),
DateTime.SpecifyKind(), DateTime.ToBinary(), DateTime.ToLocalTime(),
DateTime.ToUniversalTime(), list.Add() (может добавить
как один элемент, так и целый список; то
же самое касается функций, помеченных
далее (*)), list.Clear(), list.Contains() (*), list.GetRange(),
list.IndexOf() (*), list.Insert() (*), list.LastIndexOf() (*),
list.Remove() (при передаче двух параметров
удаляет диапазон, вызов с одним параметром
удалит от этого индекса до конца списка),
list.RemoveLast(), list.Reverse(), string.Contains(),
string.ContainsAny(), string.ContainsAnyExcluding(), string.Count(),
string.EndsWith(), string.GetAfter(), string.GetBefore(),
string.IndexOf(), string.IndexOfAny(), string.IndexOfAnyExcluding(),
string.Insert(), string.LastIndexOf(), string.LastIndexOfAny(),
string.LastIndexOfAnyExcluding(), string.Remove(), string.Replace(),
string.Split(), string.StartsWith(), string.Substring(),
string.ToCharList(), string.ToLower(), string.ToUpper(),
string.Trim(), string.TrimEnd(), string.TrimStart().
4.
Следующие типы: byte, long
int, unsigned long int, list() T, System.Func[TResult, T1, T2,
...].
5. Пространства имен.
6.
Списки и индексы.
7. Процедурный
подход в прошлом! Теперь
процветает структурное программирование:
классы, методы и свойства могут быть
как статическими, так и экземплярными,
экземплярные классы могут быть
сконструированы, присутствует даже
инкапсуляция в виде модификаторов
closed, protected и internal. К сожалению, полноценного
объектно-ориентированного программирования
еще нет вследствие отсутствия наследования
и полиморфизма.
8. Циклы
следующих типов: loop, repeat (n),
while (condition), for (type var in collection). Для
выполнения действий заранее неизвестное
число раз подходит только цикл while, так
как в repeat выражение вычисляется один
раз, и изменение входящих в него переменных
после этого бесполезно, а попытка
изменить коллекцию в for может привести
к непредсказуемым последствиям.
9.
Операторы break и continue.
10. Сложные условия
с разными комбинациями ядер в фигурных
скобках и без них. Разумеется, до
бесконечной глубины проверить нельзя,
но доступные мне проверки отлажены.
11.
Можно обратиться к свойству или функции,
входящим в тот же класс, что и место
вызова, или во включающий класс, без
явного указания имени класса.
12.
Делегаты. Но лямбды
не работают. В делегат можно
подставлять только полноценную функцию,
но большое преимущество в этом плане
над ранним C# .NET - то, что функции и даже
классы с самой первой версии могут быть
объявлены внутри других функций.
Что
уже проверено и не работает в
дополнение к версии Preview 1.0:
1. Циклы
следующих типов: loop-while,
for-while, repeat-while.
2. Конструкции
switch.
3. Кортежи. Внезапно
реализовать их оказалось сложнее, чем
я думал, из-за сложных комбинаций
сингулярных кортежей. Но у меня уже есть
наброски плана по исправлению.
4.
Сокращенный вид списка (() T).
5. Комментарии
все еще не работают!
Рабочие
примеры кода на C# .NStar:
list(3)
int a = (((1, 2, 3), (4, 5, 6), (7, 8, 9)), ((10, 11, 12), (13, 14,
15), (16, 17, 18)), ((19, 20, 21), (22, 23, 24), (25, 26, 27)));
return
a[1, 2, 3];
Class
MyClass
{
int
a = 5;
real
b = 3.14159;
string
c = "A";
Constructor(bool
bool)
{
if (bool)
{
a = 12;
}
}
}
MyClass
a1 = new MyClass();
MyClass
a2 = new MyClass(8, 2.71828, "$");
MyClass
a3 = new MyClass(8, 2.71828);
MyClass
a4 = new MyClass(true);
return
(a1, a2, a3, a4);
real
a = 0;
loop
{
if
!(a >= 10)
a++;
else
if !(a >= 12)
{
a += 0.25;
continue;
}
else
if !(a > null)
continue;
else
{
break;
}
}
return
a;
real
Function F(real x, real y)
{
return
x * x + x * y + y * y;
}
System.Func[real,
real, real] f;
f =
F;
real
a = f(3.14159, 2.71828);
f =
Max;
real
b = f(3.14159, 2.71828);
return
(a, b);
Все остальное
не проверено и, скорее всего, не
работает.
Ссылка на EXE
Назад
ко всем версиям